package kpython.backend.ir.tree;

import kpython.backend.ir.canon.AccessFunction;
import kpython.backend.ir.canon.AndFunction;
import kpython.backend.ir.canon.DifFunction;
import kpython.backend.ir.canon.DivideFunction;
import kpython.backend.ir.canon.EqEqualFunction;
import kpython.backend.ir.canon.EqGreaterFunction;
import kpython.backend.ir.canon.EqLessFunction;
import kpython.backend.ir.canon.GreaterFunction;
import kpython.backend.ir.canon.LessFunction;
import kpython.backend.ir.canon.MinusFunction;
import kpython.backend.ir.canon.MultiplyFunction;
import kpython.backend.ir.canon.NotFunction;
import kpython.backend.ir.canon.OrFunction;
import kpython.backend.ir.canon.PlusFunction;
import kpython.backend.ir.canon.PrintFunction;
import kpython.backend.ir.canon.RestFunction;
import kpython.backend.ir.canon.WriterFunction;

public interface IRTreeVisitor {
	  
	  public Object visit(Assignment node, Object data);
	  public Object visit(Atom node, Object data);
	  public Object visit(AtomList node, Object data);	  
	  public Object visit(CallBlock node, Object data);
	  public Object visit(Comparison node, Object data);	  
	  public Object visit(FORBlock node, Object data);
	  public Object visit(FunctionBlock node, Object data);
	  public Object visit(Goto node, Object data);
	  public Object visit(IFBlock node, Object data);
	  public Object visit(IFStmt node, Object data);
	  public Object visit(Label node, Object data);
	  public Object visit(Operation node, Object data);
	  public Object visit(PrintBlock node, Object data);
	  public Object visit(Relational node, Object data);
	  public Object visit(Return node, Object data);
	  public Object visit(SimpleBlock node, Object data);
	  public Object visit(WHILEBlock node, Object data);	  
	  public Object visit(Not node, Object data);
	  public Object visit(ListElement node, Object data);	
	  public Object visit(AccessFunction accessFunction, Object data);
	  public Object visit(DifFunction difFunction, Object data);
	  public Object visit(DivideFunction divideFunction, Object data);
	  public Object visit(EqEqualFunction eqEqualFunction, Object data);
	  public Object visit(EqGreaterFunction eqGreaterFunction, Object data);
	  public Object visit(EqLessFunction eqLessFunction, Object data);
	  public Object visit(GreaterFunction greaterFunction, Object data);
	  public Object visit(LessFunction lessFunction, Object data);
	  public Object visit(MinusFunction minusFunction, Object data);
	  public Object visit(MultiplyFunction multiplyFunction, Object data);
	  public Object visit(NotFunction notFunction, Object data);
	  public Object visit(OrFunction orFunction, Object data);
	  public Object visit(PlusFunction plusFunction, Object data);
	  public Object visit(PrintFunction printFunction, Object data);
	  public Object visit(RestFunction restFunction, Object data);
	  public Object visit(WriterFunction writerFunction, Object data);
	  public Object visit(AndFunction andFunction, Object data);
	
}

